전송 계층 보안
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
전송 계층 보안(TLS)은 클라이언트-서버 애플리케이션이 네트워크를 통해 통신할 때 도청, 간섭, 위조를 방지하기 위해 설계된 암호화 프로토콜이다. TLS는 종단 간 인증, 통신 기밀성을 유지하며, 암호화된 통신을 제공하여 스니핑 공격과 같은 정보 탈취를 방지한다. TLS는 3단계 기본 절차(알고리즘 교환, 키 교환/인증, 암호화)를 거치며, 다양한 암호화 알고리즘을 지원한다. TLS는 HTTP, FTP, SMTP 등 다양한 프로토콜에 적용되며, 웹사이트와 웹 브라우저 간의 HTTPS 프로토콜을 보호하는 데 주로 사용된다. TLS는 또한 VPN, VoIP, SIP 애플리케이션에서도 활용된다. 그러나 TLS 도입만으로는 보안이 보장되지 않으며, 재협상 공격, 다운그레이드 공격, 구현 오류 등 다양한 보안 취약점에 노출될 수 있다. DTLS(Datagram Transport Layer Security)는 UDP와 같은 데이터그램 기반 프로토콜에 대한 TLS의 변형이다.
더 읽어볼만한 페이지
- 암호 프로토콜 - HTTPS
HTTPS는 HTTP에 보안 기능이 더해진 통신 규약으로, 웹 브라우저와 서버 간 통신을 암호화하여 보안을 강화하지만, 인증서 비용, 서버 부하, 혼합 콘텐츠 문제 등의 단점도 존재한다. - 암호 프로토콜 - IPsec
IPsec은 IP 네트워크에서 보안 통신을 제공하기 위한 프로토콜 스위트로서, 전송 모드와 터널 모드를 지원하며, AH, ESP 등의 프로토콜을 사용하여 데이터 무결성, 인증, 기밀성을 제공하고, IKE 프로토콜을 통해 보안 연결을 설정 및 키를 교환하는 개방형 표준이다. - 전송 계층 보안 - 공개 키 기반 구조
공개 키 기반 구조(PKI)는 공개 키 암호화를 기반으로 안전한 통신과 개체 식별을 가능하게 하는 기술로서, 디지털 인증서를 통해 공개 키를 특정 개체에 연결하고 인증서를 관리하며, 인증 기관(CA), 등록 기관(RA) 등 다양한 구성 요소로 이루어져 인증서 발급, 관리, 배포, 사용 및 폐기와 관련된 역할, 정책, 하드웨어, 소프트웨어 및 절차의 집합을 포함한다. - 전송 계층 보안 - HTTPS
HTTPS는 HTTP에 보안 기능이 더해진 통신 규약으로, 웹 브라우저와 서버 간 통신을 암호화하여 보안을 강화하지만, 인증서 비용, 서버 부하, 혼합 콘텐츠 문제 등의 단점도 존재한다. - 인터넷 보안 - 토르 (네트워크)
토르(Tor)는 사용자의 익명성을 보장하고 온라인 활동을 보호하기 위해 개발된 네트워크로, 암호화된 통신을 여러 노드를 거쳐 전송하며 검열 우회, 언론의 자유를 위한 도구로 활용되지만 범죄에도 악용될 수 있다. - 인터넷 보안 - DNS 스푸핑
DNS 스푸핑은 DNS 서버의 캐시를 조작하여 사용자를 악성 사이트로 리디렉션하는 사이버 공격 기법이다.
전송 계층 보안 | |
---|---|
개요 | |
종류 | 암호화 프로토콜 |
계층 | 전송 계층 또는 응용 계층 |
기능 | 데이터 암호화 통신 보안 데이터 무결성 보장 |
상세 내용 | |
설명 | 전송 계층 보안(TLS) 및 이전 명칭인 보안 소켓 계층(SSL)은 컴퓨터 네트워크를 통한 통신 보안을 제공하기 위해 설계된 암호화 프로토콜이다. TLS 및 SSL은 웹 브라우징, 이메일, 인터넷 팩스, 인스턴트 메시징, VoIP 및 기타 데이터 전송과 같은 애플리케이션에서 널리 사용된다. 전송 계층에서 작동하므로 TCP와 같은 신뢰적인 전송 프로토콜을 사용하는 모든 애플리케이션에 보안을 제공할 수 있다. |
역사 | SSL 1.0: 출시되지 않음 SSL 2.0: 1995년 출시 SSL 3.0: 1996년 출시 TLS 1.0: 1999년 출시 (RFC 2246) TLS 1.1: 2006년 출시 (RFC 4346) TLS 1.2: 2008년 출시 (RFC 5246) TLS 1.3: 2018년 출시 (RFC 8446) |
사용 | HTTPS SMTPS STARTTLS FTPS IMAPS |
보안 | 기밀성 무결성 인증 |
취약점 | POODLE BEAST CRIME BREACH Lucky 13 하트블리드 로그잼 FREAK |
기술적 세부 사항 | |
작동 방식 | TLS는 클라이언트와 서버 간에 안전한 연결을 설정하기 위해 핸드셰이크 프로세스를 사용한다. 이 핸드셰이크 동안 클라이언트는 서버의 인증서를 확인하고, 암호화 알고리즘을 협상하고, 세션 키를 교환한다. 일단 연결이 설정되면, 클라이언트와 서버 간의 모든 데이터는 암호화되어 전송된다. |
주요 구성 요소 | 핸드셰이크 프로토콜 레코드 프로토콜 경고 프로토콜 암호화 스위트 |
암호화 스위트 종류 | 대칭 암호화 알고리즘 (예: AES, DES) 비대칭 암호화 알고리즘 (예: RSA, Diffie-Hellman) 해시 함수 (예: SHA-256, MD5) |
표준 및 규격 | |
IETF 표준 | RFC 2246 (TLS 1.0) RFC 4346 (TLS 1.1) RFC 5246 (TLS 1.2) RFC 8446 (TLS 1.3) |
기타 정보 | |
참고 사항 | SSL 3.0은 2015년에 더 이상 사용되지 않음 (RFC 7568). |
2. 설명
TLS는 클라이언트/서버 응용 프로그램이 네트워크 통신 시 도청, 간섭, 위조를 방지하기 위해 설계되었으며, 암호화를 통해 종단 간 인증 및 통신 기밀성을 유지한다.
TLS는 다음 3단계 기본 절차를 거친다.
1. 상호 지원 가능한 알고리즘 교환
2. 키 교환 및 인증
3. 대칭키 암호를 이용한 암호화 및 메시지 인증
첫 단계에서 서버와 클라이언트는 암호 스위트를 교환하여 키 교환 및 인증에 사용될 암호화 방법과 메시지 인증 코드(MAC)를 결정한다. 키 교환 및 인증 알고리즘은 공개키 방식 또는 TLS-PSK와 같이 미리 공유된 키를 사용할 수 있다. 메시지 인증 코드는 HMAC 해시 함수로 만들어지며, SSL에서는 비표준 무작위 함수가 사용된다.
일반적인 알고리즘은 다음과 같다.
- 키 교환: RSA, Diffie-Hellman, ECDH, SRP, PSK
- 인증: RSA, DSA, ECDSA
- 대칭키 암호: RC4, 트리플 DES, AES, IDEA, DES, 아리아, ChaCha20, Camellia. (구 버전 SSL에서는 RC2 사용)
- 해시 함수: TLS에서는 HMAC-MD5 또는 HMAC-SHA. SSL에서는 MD5와 SHA. (구 버전 SSL에서는 MD2와 MD4 사용)
클라이언트-서버 애플리케이션은 도청 및 변조를 방지하기 위해 TLS 프로토콜을 사용한다. 클라이언트가 서버에 TLS 연결을 요청하는 방법은 두 가지가 있다. 첫 번째는 TLS 연결에 다른 포트 번호를 사용하는 것이다. 예를 들어, 포트 80은 암호화되지 않은 HTTP 트래픽에, 포트 443은 암호화된 HTTPS 트래픽에 사용된다. 두 번째는 프로토콜별 STARTTLS 요청을 서버에 전송하여 연결을 TLS로 전환하는 것이다. (예: 메일 및 뉴스 프로토콜)
클라이언트와 서버가 TLS를 사용하기로 합의하면, 핸드셰이크 절차를 통해 상태 연결을 협상한다.[3] 프로토콜은 비대칭 암호화를 사용하여 핸드셰이크를 통해 암호 설정을 협상하고, 대칭 암호화에 사용될 세션별 공유 키를 설정한다. 이 핸드셰이크 동안 클라이언트와 서버는 연결 보안에 사용되는 다양한 매개변수에 동의한다.
- 핸드셰이크는 클라이언트가 보안 연결을 요청하면서 TLS를 지원하는 서버에 연결하고, 클라이언트가 지원하는 암호화 제품군 목록(암호 및 해시 함수)을 제시하면서 시작된다.
- 서버는 이 목록에서 지원하는 암호 및 해시 함수를 선택하고 클라이언트에 알린다.
- 일반적으로 서버는 디지털 인증서 형태로 신원을 제공한다. 인증서에는 서버 이름, 인증서의 진위 여부를 보증하는 신뢰할 수 있는 인증 기관(CA), 서버의 공개 암호화 키가 포함된다.
- 클라이언트는 인증서의 유효성을 확인한다.
- 보안 연결에 사용되는 세션 키를 생성하기 위해 클라이언트는 다음 중 하나를 수행한다.
- 서버의 공개 키로 난수(''PreMasterSecret'')를 암호화하여 서버에 보내고(서버만 개인 키로 해독 가능), 양 당사자는 난수를 사용하여 세션 동안 데이터 암호화 및 해독을 위한 고유한 세션 키를 생성한다.
- 디피-헬만 키 교환 (또는 그 변형인 타원 곡선 DH)을 사용하여 전방 보안 속성을 갖는 암호화 및 해독을 위한 무작위하고 고유한 세션 키를 안전하게 생성한다. 서버의 개인 키가 나중에 공개되더라도 세션이 제3자에 의해 가로채지고 기록되더라도 현재 세션을 해독하는 데 사용할 수 없다.
핸드셰이크가 종료되고 보안 연결이 시작되면, 연결이 종료될 때까지 세션 키로 암호화 및 해독이 이루어진다. 위 단계 중 하나라도 실패하면 TLS 핸드셰이크가 실패하고 연결이 생성되지 않는다.
TLS와 SSL은 OSI 모델 또는 TCP/IP 모델의 특정 계층에 정확히 들어맞지 않는다.[4][5] TLS는 "일부 신뢰할 수 있는 전송 프로토콜(예: TCP) 위에" 실행되므로 전송 계층 위에 위치하며, 일반적으로 표현 계층의 기능인 상위 계층에 암호화를 제공한다. 그러나 애플리케이션은 일반적으로 TLS를 전송 계층처럼 사용한다.[4][5] TLS를 사용하는 애플리케이션은 TLS 핸드셰이크를 시작하고 교환된 인증 인증서를 처리하는 것을 적극적으로 제어해야 한다.
TLS로 보호되는 경우, 클라이언트와 서버 간의 연결은 다음과 같은 속성을 가진다.
- 연결은 대칭 키 알고리즘을 사용하여 전송된 데이터를 암호화하므로 ''비공개''(또는 ''기밀성'')이다. 이 대칭 암호화에 대한 키는 각 연결에 대해 고유하게 생성되며 세션 시작 시 협상된 공유 비밀을 기반으로 한다. 서버와 클라이언트는 사용할 암호화 알고리즘 및 암호화 키의 세부 사항을 협상한다.
- 통신 당사자의 신원은 공개 키 암호화를 사용하여 ''인증''할 수 있다. 이 인증은 서버에 필요하며 클라이언트에는 선택 사항이다.
- 연결은 전송 중 데이터의 감지되지 않은 손실 또는 변경을 방지하기 위해 각 전송된 메시지에 메시지 인증 코드를 사용한 메시지 무결성 검사가 포함되어 ''신뢰할 수 있다''(또는 ''무결성''이 있다).
TLS는 키 교환, 데이터 암호화, 메시지 무결성 인증을 위한 다양한 방법을 지원한다. 따라서 TLS의 보안 구성에는 많은 구성 가능한 매개변수가 포함되며, 모든 선택 사항이 위에서 설명한 모든 개인 정보 관련 속성을 제공하는 것은 아니다.
TLS가 제공하려는 통신 보안을 훼손하려는 시도가 있었고, 이러한 보안 위협을 해결하기 위해 프로토콜이 여러 번 수정되었다. 웹 브라우저 개발자는 잠재적 보안 취약성이 발견된 후 제품을 반복적으로 수정하여 보안 취약성에 대응해 왔다.
TLS는 대부분 연결 지향형 전송 계층 프로토콜(일반적으로 TCP)과 응용 계층 사이에서 사용된다. 특히 HTTP에서의 사용을 염두에 두고 설계되었지만, 응용 계층의 특정 프로토콜에 의존하지 않고 다양한 응용 프로그램에서 사용된다. TLS 1.1 이후를 기반으로 한 프로토콜은 UDP나 DCCP와 같은 데이터그램형 프로토콜에서도 구현되었으며, 이는 DTLS로 독립적으로 표준화되었다.
TLS는 HTTP 등과 같은 응용 계층 프로토콜과 결합하여 HTTPS와 같은 보안 통신 프로토콜을 구현한다.
SSL과 결합한 프로토콜 | 포트 번호 | 원래 프로토콜 | 포트 번호 |
---|---|---|---|
HTTPS | 443 | HTTP | 80 |
SMTPS | 465 | SMTP | 25 |
LDAPS | 636 | LDAP | 389 |
FTPS (data) | 989 | FTP (data) | 20 |
FTPS (control) | 990 | FTP (control) | 21 |
IMAPS | 993 | IMAP | 143 |
POP3S | 995 | POP3 | 110 |
TLS는 특정 응용 계층 프로토콜에 의존하지 않기 때문에, HTTP 외에도 많은 프로토콜에서 채택되어 신용 카드 정보, 개인 정보 등 기밀 정보를 통신할 때 사용된다.
기존 응용 계층 프로토콜에서 TLS를 이용하는 방식은 크게 두 가지이다. 첫 번째는 하위 계층(일반적으로 TCP) 연결 확립 후 즉시 TLS 협상을 시작하고, TLS 연결 확립 후 응용 계층 프로토콜 통신을 시작하는 방식이다. 두 번째는 먼저 기존 응용 계층 프로토콜로 통신을 시작하고, 그 안에서 TLS로 전환을 지시하는 방식이다. 전환 명령어로서 `STARTTLS`가 널리 사용되므로, 이 방식 자체를 STARTTLS라고 부르기도 한다.
전자는 응용 계층 프로토콜을 변경하지 않아도 된다는 장점이 있지만, 평문 연결 시작 구현과 공존할 수 없으므로 기존 포트 번호와 별도로 TLS 대응용 포트 번호가 필요하다. 실제로는 HTTPS를 비롯하여 전자의 방식을 사용하는 경우가 많다. 하지만 이 방식은 가상 호스트 구성 시 문제가 발생할 수 있다.
한편, 포트 번호를 나누는 방식을 SSL, 동일한 포트 번호로 전환하는 방식(STARTTLS 방식)을 TLS라고 부르는 구현도 있다.[188] TLS/SSL이라는 용어의 구별이 프로토콜 버전을 가리키는 것인지, 응용 계층 프로토콜에 적용 방식을 가리키는 것인지는 문맥에 따라 판단해야 한다.
웹사이트에서의 TLS/SSL 지원 현황은 다음과 같다. (2021년 1월 기준)[236]
프로토콜 | 웹사이트 지원 | 보안 |
---|---|---|
SSL 2.0 | 0.2% | |
SSL 3.0 | 1.7% | [449] |
TLS 1.0 | 29.5% | |
TLS 1.1 | 31.8% | |
TLS 1.2 | 99.9% | |
TLS 1.3 | 66.2% |
주요 웹 브라우저의 최신 버전에서는 TLS 1.2, 1.3이 기본적으로 활성화되어 있지만, 이전 버전의 OS 등 지원이 지속되는 웹 브라우저의 일부 버전에서는 그렇지 않다.
- TLS 1.3을 지원하지만 기본적으로 비활성화: Internet Explorer 11(Windows 10 버전 1903 이상)
- TLS 1.3을 미지원: Internet Explorer 11(Windows 10 버전 1903 이전)
TLS 1.0, 1.1은 취약성이 우려되어[240] 2020년부터 비활성화가 실시되기 시작했다.[241]
알려진 취약점의 일부에 대한 대응은 충분하지 않다.
- POODLE 공격 대응: 일부 브라우저는 TLS\_FALLBACK\_SCSV를 구현하여 SSL 3.0으로의 폴백을 억제할 수 있지만, 이는 클라이언트 측뿐만 아니라 서버 측의 대응도 필요하다. SSL 3.0 자체의 비활성화, "anti-POODLE record splitting" 구현 또는 SSL 3.0에서의 CBC 모드 cipher suite 비활성화가 근본적인 대책이다.
- RC4 공격 대응: 자세한 내용은 생략한다.
- FREAK 공격 대응: 자세한 내용은 생략한다.
TLS/SSL 라이브러리 대부분은 오픈 소스 소프트웨어이다.
2. 1. Datagram Transport Layer Security
데이터그램 전송 계층 보안(Datagram Transport Layer Security, DTLS)은 데이터그램 기반 애플리케이션이 도청, 중간자 공격, 메시지 위조를 방지하도록 설계된 통신 방식을 사용해 통신 보안을 제공하는 관련 통신 프로토콜이다.[6][7] DTLS 프로토콜은 스트림 지향 전송 계층 보안(TLS) 프로토콜을 기반으로 하며 유사한 보안 보장을 제공한다. 그러나 TLS와 달리 사용자 데이터그램 프로토콜(UDP), 데이터그램 혼잡 제어 프로토콜(DCCP), 무선 액세스 포인트의 제어 및 프로비저닝(CAPWAP), 스트림 제어 전송 프로토콜(SCTP) 캡슐화, 보안 실시간 전송 프로토콜(SRTP)을 포함한 대부분의 데이터그램 지향 프로토콜과 함께 사용할 수 있다.DTLS 프로토콜 데이터그램은 기본 전송의 의미를 유지하므로 애플리케이션은 스트림 프로토콜과 관련된 지연을 겪지 않지만, 패킷 재정렬, 데이터그램 손실 및 데이터그램 네트워크 패킷 크기보다 큰 데이터를 처리해야 한다. DTLS는 TCP 대신 UDP 또는 SCTP를 사용하기 때문에 VPN 터널을 생성하는 데 사용될 때 TCP 멜트다운 문제를[8][9] 피할 수 있다.
2006년에 처음 출시된 DTLS 버전 1.0은 독립형 문서가 아니었다. TLS 1.1에 대한 일련의 델타로 제공되었다.[10] 마찬가지로 후속 2012년 DTLS 릴리스는 TLS 1.2에 대한 델타이다. TLS 버전에 맞춰 DTLS 1.2의 버전 번호가 부여되었다. 마지막으로, 2022 DTLS 1.3은 TLS 1.3에 대한 델타이다. 이전 두 버전과 마찬가지로 DTLS 1.3은 "순서 보호/재생 불가능성을 제외하고 [TLS 1.3에] 동등한 보안 보장"을 제공하도록 설계되었다.[11]
VPN 클라이언트인 시스코(Cisco) AnyConnect[12] 및 InterCloud Fabric,[13] OpenConnect,[14] ZScaler 터널,[15] F5 네트웍스(F5 Networks)의 Edge VPN 클라이언트,[16] 및 시트릭스 시스템(Citrix Systems)의 NetScaler[17]는 DTLS를 사용하여 UDP 트래픽을 보호한다. 또한 모든 최신 웹 브라우저는 WebRTC에 대한 DTLS-SRTP[18]를 지원한다.
3. 개발 역사
넷스케이프가 SSL 규약을 처음 개발했다. SSL 1.0 버전은 공개되지 않았고, 1995년 2월에 SSL 2.0 버전이 출시되었다. 그러나 SSL 2.0 버전은 여러 보안 결함이 발견되어, 1996년에 출시된 SSL 3.0 버전으로 대체되었다. SSL 3.0은 IETF에서 1999년 1월에 RFC 2246 표준 규약으로 정의된 TLS 1.0의 기반이 되었다.[40][19][20]
프로토콜 | 연도 |
---|---|
SSL 1.0 | - |
SSL 2.0 | 1995 |
SSL 3.0 | 1996 |
TLS 1.0 | 1999 |
TLS 1.1 | 2006 |
TLS 1.2 | 2008 |
TLS 1.3 | 2018 |
TLS는 1986년 8월에 시작된 국립안보국, 국립표준국, 국방통신국, 그리고 12개의 통신 및 컴퓨터 회사 간의 공동 이니셔티브인 보안 데이터 네트워크 시스템(SDNS) 프로젝트를 통해 개발되었다.[23] 이 프로토콜은 원래 SP4 프로토콜로 알려졌으나, TLS로 이름이 변경되었고, 1995년에 국제 표준 ITU-T X.274|ISO/IEC 10736:1995로 발표되었다.
TLS는 대부분 연결 지향형 전송 계층 프로토콜(일반적으로 TCP)과 응용 계층 사이에서 사용되도록 설계되었다. TLS 1.1 이후를 기반으로 한 프로토콜은 UDP나 DCCP와 같은 데이터그램형 프로토콜에서도 구현되었으며, 이는 DTLS로 독립적으로 표준화되었다.
4. 보안부분 약점
패킷이 암호화되어 송수신되므로 스니핑 공격에서는 뛰어난 보안성을 보인다. 그러나 암호화된 패킷이 클라이언트 PC 또는 서버로 전송되기 때문에 송수신 간 데이터 교환 자체는 막을 수 없다. 따라서 개인정보 유출, DDoS, APT, 악성코드 공격에는 취약하다.[478]
TLS는 공개 키 인증서를 사용하여 인증을 수행하고 사칭을 최대한 막으려 한다. 그러나 시스템의 자동적인 대응에는 한계가 있어 모든 사칭을 탐지할 수 있는 것은 아니다. 공개 키 인증서에는 인증 기관의 전자 서명이 주어지는데, 이 서명의 정당성을 평가하려면 인증 기관의 인증서, 최종적으로는 루트 인증서가 필요하다. 각 시스템은 신뢰할 수 있는 루트 인증서를 미리 가지고 있다. 인증 기관은 비밀 키를 엄중히 비밀로 하고, 인증서 발행 시 정당한 서버 관리자인지 확인해야 한다. 이러한 점들이 보장되지 않으면 TLS 인증 기능이 무너질 수 있다.
TLS로 인증을 수행하려면 인증 기관의 서명 외에도 인증서 발행처를 확인해야 한다. 확인하지 않으면 서버 A의 관리 권한이 없는 자가 서버 B로서 정당한 인증서를 취득해 서버 A를 사칭할 수 있다. TLS용 서버 인증서에는 발행처 서버의 호스트명이 기록되어 있으며, 클라이언트는 자신이 접속하려는 서버의 호스트명과 일치하는지 확인해야 한다.
현실에서는 "정당한" 서버라도 검증 결과 "문제가 있다"고 판단되는 인증서를 사용하는 경우가 많다. 보안 연구자 다카기 히로미츠는 이러한 인증서를 오레오레 인증서라고 부르며 비판한다.[192]
이 검증은 시스템에 지정된 접속처의 호스트명과 실제로 접속한 곳의 호스트명이 일치하는지를 확인하는 것이며, 이용자가 의도하는 접속처와 반드시 일치하는 것은 아니다.
예를 들어, 이용자가 접속하려는 서버 A가 호스트명 www.example.'''com'''으로 서비스를 제공하고, 공격자가 서버 B 및 호스트명 www.example.'''org'''를 취득한 경우를 생각해 보자. 공격자가 DNS 스푸핑에 성공하여 www.example.com으로의 접속을 서버 B로 유도할 수 있어도, www.example.com의 서버 인증서를 입수할 수 없기 때문에 TLS 접속을 제공할 수 없다. 그러나 공격자는 www.example.org의 서버 인증서를 입수할 수 있다. 따라서 서버 A에 접속하려는 이용자를 www.example.com이 아닌 www.example.org로 접속시킬 수 있다면, 클라이언트에서는 정당한 인증서를 가진 서버로밖에 보이지 않는다.
이용자가 의도하는 접속처인지 판단하려면 다음 두 가지 조건을 만족해야 한다.
# 이용자는 의도하는 접속처의 올바른 호스트명을 알고 있다.
# 이용자는 현재 시스템에 지정된 접속처가 자신이 알고 있는 올바른 호스트명과 일치하는지 확인할 수 있다.
두 번째 조건은 정보 처리 추진 기구(IPA)가 공개한 "안전한 웹사이트 만드는 방법"[193]의 "[피싱] 사기를 조장하지 않기 위한 대책"에 해당한다.
5. 주요 특징
전송 계층 보안(TLS) 프로토콜은 1986년 8월, 미국 국립안보국(NSA), 국립표준국(NIST), 국방통신국(DCA) 및 12개 통신/컴퓨터 회사 간의 공동 이니셔티브인 보안 데이터 네트워크 시스템(SDNS) 프로젝트에서 시작되었다.[23] 1987년 9월 제10회 전국 컴퓨터 보안 컨퍼런스에서 발표된 이 연구는 공공 및 사설 인터넷 애플리케이션을 위한 차세대 보안 컴퓨터 통신 네트워크 및 제품 설계를 목표로 했다.
원래 SP4 프로토콜로 알려졌던 이 프로토콜은 TLS로 이름이 변경되었고, 1995년에 국제 표준 ITU-T X.274|ISO/IEC 10736:1995로 발표되었다.
TLS/SSL 프로토콜의 주요 특징은 다음과 같다.
- 암호화: SSL 인증서는 웹 서버와 사용자 브라우저 간에 전송되는 데이터를 암호화하여 전송 과정에서 민감한 정보를 보호한다.
- 인증: SSL 인증서는 웹사이트의 무결성을 보장하고 방문자가 악의적인 사칭자가 아닌 올바른 서버에 연결되도록 돕는다.
- 무결성: SSL은 암호화 기술을 사용하여 서버와 브라우저 간에 통신되는 데이터가 전송 중에 변경되지 않고 온전하게 유지되도록 검증한다.
TLS는 일반적으로 인증서의 진위 여부를 확인하기 위해 신뢰할 수 있는 제3자 인증 기관에 의존한다. Netcraft에 따르면, 2019년 5월 기준 시장 점유율 측면에서 상위 3대 인증 기관은 IdenTrust, DigiCert, Sectigo이다.[67]
클라이언트와 서버는 필요에 따라 Change Cipher Spec 프로토콜 메시지를 서로에게 보내고, 종료를 의미하는 Finished 메시지를 보낸다.[198]
5. 1. 알고리즘
TLS는 지원 가능한 알고리즘을 서로 교환하고, 키 교환 및 인증, 대칭키 암호로 암호화 및 메시지 인증의 3단계 기본 절차를 거친다. 이 과정에서 다양한 알고리즘이 사용된다.- 키 교환: RSA, Diffie-Hellman, ECDH, SRP, PSK
- 인증: RSA, DSA, ECDSA
- 대칭키 암호: RC4, 트리플 DES, AES, IDEA, DES, 아리아, ChaCha20, Camellia. (옛날 버전 SSL에서는 RC2가 쓰임)
- 해시 함수: TLS에서는 HMAC-MD5 또는 HMAC-SHA. (SSL에서는 MD5와 SHA. 옛날 버전 SSL에서는 MD2와 MD4가 쓰임)[31][32][33][34]
TLS 1.2에서는 암호 스위트를 다음과 같은 형식으로 표현한다.
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
이는 다음과 같은 의미를 가진다.
- 키 공유 방식으로 DSS 서명을 사용한 EDH(Ephemeral Diffie-Hellman)를 사용한다.
- 인증 암호로 평문에 MAC을 붙인 후 공통키 암호화하는 MAC-then-Encrypt(MtE)형을 사용한다.
- 공통키 암호로 CBC 모드의 256비트 키 AES를 사용한다.
- MAC으로는 SHA256 해시 함수를 기반으로 한 HMAC을 사용한다.
TLS 1.2에서는 AES-GCM과 같은 인증 암호 전용 암호 이용 모드도 사용할 수 있으며, 이 경우 MAC은 필요하지 않다. RSA 암호와 RSA 서명을 조합한 키 공유 방식은 TLS_RSA_WITH_…처럼 약칭한다. 키 공유, 공통키 암호, 해시 함수의 모든 조합이 가능한 것은 아니며, 동시에 사용할 수 없는 조합도 존재한다.
SSL/TLS에서 사용할 수 있는 키 공유 방식은 다음과 같다. (DH는 디피-헬만을 의미). DH-ANON, ECDH-ANON은 중간자 공격에 취약하여 안전하지 않다.
- '''DH-ANON''' (Anonymous DH), '''ECDH-ANON''' (Anonymous ECDH): 전송 데이터에 서명하지 않고 DH 키 공유, ECDH 키 공유를 수행한다.
- '''DHE-*''' ('''Ephemeral DH'''): 키 공유 시 클라이언트, 서버가 임의의 값을 선택하고, 지수승을 계산하여 서명문을 첨부하여 교환한다. "'''*'''" 부분에는 서명 방식이 기재된다. '''ECDHE-***'''는 DHE의 타원 DH 버전이다.
- '''DH-*''' ('''Fixed DH''' 또는 '''non-interactive DH'''): 디피-헬만 키 교환에서 사용하는 매개변수(클라이언트, 서버의 지수승 값)가 클라이언트나 서버의 공개키로 인증 기관으로부터 공개키 인증서를 수신한 경우이다. "'''*'''" 부분에는 공개키 인증서 내의 서명 방식을 기재한다. '''ECDH-***''' ('''Fixed ECDH''')는 Fixed DH의 타원 DH 버전이다.
- '''RSA-***''': 임의로 선택한 공유키를 서버의 공개키로 RSA 암호화하고, 암호문에 지정된 서명 방식으로 서명하여 ClientKeyExchange에서 서버로 보낸다. (ServerKeyExchange에서는 아무것도 보내지 않음).
어떤 키 공유 방식을 사용하든, 공유된 키(premaster secret)와 클라이언트 및 서버가 선택한 난수를 의사 난수 함수에 입력하여 최종 master secret을 얻는다. 이를 통해 재생 공격을 방지한다.
PSK를 사용한 TLS_PSK, SRP를 사용한 TLS_SRP, Kerberos를 사용한 KRB5도 존재한다. 독립 국가 연합의 GOST 표준에 의해 규정된 키 공유 알고리즘인 GOST R 34.10도 제안되었다.[216]
5. 1. 1. 키 교환 또는 키 합의
TLS(전송 계층 보안)를 통해 정보를 안전하게 교환하려면, 클라이언트와 서버는 암호화 키와 데이터를 암호화할 때 사용할 암호를 안전하게 교환하거나 합의해야 한다. 키 교환/합의에 사용되는 주요 알고리즘은 다음과 같다.[70][71]- RSA: RSA로 생성된 공개 키와 개인 키를 사용한다. (TLS 핸드셰이크 프로토콜에서 TLS_RSA로 표시)
- 디피-헬만 (TLS_DH)
- 타원 곡선 디피-헬만 (TLS_ECDH)
- 익명 디피-헬만 (TLS_DH_anon): 서버나 사용자를 인증하지 않으므로 중간자 공격에 취약하여 거의 사용되지 않는다.
- 사전 공유 키 (TLS_PSK)
- 보안 원격 암호 (TLS_SRP)
임시 디피-헬만 (TLS_DHE) 및 임시 타원 곡선 디피-헬만 (TLS_ECDHE)은 전방 보안을 제공한다.
알고리즘 | SSL 2.0 | SSL 3.0 | TLS 1.0 | TLS 1.1 | TLS 1.2 | TLS 1.3 | 상태 |
---|---|---|---|---|---|---|---|
RSA | 예 | 예 | 예 | 예 | 예 | 아니요 | RFC에서 TLS 1.2에 정의됨 |
DH-RSA | 아니요 | 예 | 예 | 예 | 예 | 아니요 | |
DHE-RSA (전방 보안) | 아니요 | 예 | 예 | 예 | 예 | 예 | |
ECDH-RSA | 아니요 | 아니요 | 예 | 예 | 예 | 아니요 | |
ECDHE-RSA (전방 보안) | 아니요 | 아니요 | 예 | 예 | 예 | 예 | |
DH-DSS | 아니요 | 예 | 예 | 예 | 예 | 아니요 | |
DHE-DSS (전방 보안) | 아니요 | 예 | 예 | 예 | 예 | 아니요 [74] | |
DHE-ECDSA (전방 보안) | 아니요 | 아니요 | 아니요 | 아니요 | 아니요 | 예 | |
ECDH-ECDSA | 아니요 | 아니요 | 예 | 예 | 예 | 아니요 | |
ECDHE-ECDSA (전방 보안) | 아니요 | 아니요 | 예 | 예 | 예 | 예 | |
DHE-EdDSA (전방 보안) | 아니요 | 아니요 | 아니요 | 아니요 | 아니요 | 예 | |
ECDH-EdDSA | 아니요 | 아니요 | 예 | 예 | 예 | 아니요 | |
ECDHE-EdDSA (전방 보안)[75] | 아니요 | 아니요 | 예 | 예 | 예 | 예 | |
PSK | 아니요 | 아니요 | 예 | 예 | 예 | 예 | |
RSA-PSK | 아니요 | 아니요 | 예 | 예 | 예 | 아니요 | |
DHE-PSK (전방 보안) | 아니요 | 아니요 | 예 | 예 | 예 | 예 | |
ECDHE-PSK (전방 보안) | 아니요 | 아니요 | 예 | 예 | 예 | 예 | |
SRP | 아니요 | 아니요 | 예 | 예 | 예 | 아니요 | |
SRP-DSS | 아니요 | 아니요 | 예 | 예 | 예 | 아니요 | |
SRP-RSA | 아니요 | 아니요 | 예 | 예 | 예 | 아니요 | |
Kerberos | 아니요 | 아니요 | 예 | 예 | 예 | ||
DH-ANON (안전하지 않음) | 아니요 | 예 | 예 | 예 | 예 | 아니요 | |
ECDH-ANON (안전하지 않음) | 아니요 | 아니요 | 예 | 예 | 예 | 아니요 | |
GOST[76] | 아니요 | 아니요 | 아니요 | 아니요 | 예 | 예 | TLS 1.2 및 TLS 1.3에 대해 정의됨. |
교환/합의 중에 사용되는 공개 키 인증서도 교환 중에 사용되는 공개/개인 암호화 키의 크기가 다르며, 이에 따라 제공되는 보안의 견고함도 다르다. 2013년 7월 구글(Google)은 사용자가 제공하는 TLS 암호화의 보안을 강화하기 위해 1024비트 공개 키를 더 이상 사용하지 않고 2048비트 키로 전환할 것이라고 발표했다. 이는 암호화 강도가 키 크기와 직접적인 관련이 있기 때문이다.[72][73]
5. 1. 2. 인증
인증에는 RSA, DSA, ECDSA 등의 알고리즘이 사용된다.5. 1. 3. 대칭키 암호
TLS/SSL에서 사용되는 대칭키 암호에는 다음과 같은 알고리즘들이 있다.암호화 | 프로토콜 버전 | 상황 | ||||||
---|---|---|---|---|---|---|---|---|
종류 | 알고리즘 | 암호 강도 (bit) | SSL 2.0 | SSL 3.0[217][218][219][220] | TLS 1.0[217][219] | TLS 1.1[217] | TLS 1.2[217] | |
블록 암호 (암호 운용 방식) | AES GCM[221][222] | 256, 128 | TLS 1.2를 위해 RFC에서 정의됨 | |||||
AES CCM[223][222] | ||||||||
AES CBC[228] | ||||||||
카멜리아 GCM[224][222] | 256, 128 | |||||||
카멜리아 CBC[225][228] | ||||||||
ARIA GCM[226][222] | 256, 128 | |||||||
ARIA CBC[226][228] | ||||||||
SEED CBC[227][228] | 128 | |||||||
3DES EDE CBC[228] | 112 | |||||||
CTR[216] | 256 | RFC 초안으로 제안 중 | ||||||
IDEA CBC[228][231] | 128 | TLS 1.2에서 폐지 | ||||||
DES CBC[228][231] | 56 | |||||||
40[232] | TLS 1.1 이후 사용 금지 | |||||||
RC2 CBC[228] | 40[232] | |||||||
스트림 암호 | ChaCha20+Poly1305[233][222] | 256 | TLS 1.2를 위해 RFC에서 정의됨 | |||||
RC4[234] | 128 | 모든 버전에서 사용 금지 | ||||||
40[232] | ||||||||
암호화 없음 | Null[235] | - | TLS 1.2를 위해 RFC에서 정의됨 |
AES CBC는 TLS 1.0에 포함되어 있지 않지만, RFC 3268에서 추가되었다. TLS 1.1에서는 RFC 3268을 참조하며, TLS 1.2에서는 정의에 AES CBC에 관한 기술이 포함되었다. 또한, 인증 암호에 의한 AES GCM (RFC 5288, RFC 5289), AES CCM (RFC 6655, RFC 7251)이 추가되었다. IDEA CBC, DES CBC는 TLS 1.2에서 폐지되었다. (RFC 5469에 해설이 있다.)
블록 암호의 CBC 모드에서의 이용에 대해서는, TLS 1.0 이전에서 BEAST 공격이 가능하다는 것이 밝혀졌으며, 대응이 필요하다. TLS 1.1 이후에서는 이 공격에 대한 근본적인 대처로서 초기화 벡터를 명시적으로 지정하고, 패딩 처리가 개선되었다. 블록 암호여도 GCM, CCM 등의 인증 암호를 사용하는 경우에는 이러한 공격을 받지 않는다.
스트림 암호인 RC4는 BEAST 공격을 받지 않지만, RC4에는 사양상의 취약성이 존재한다. (RC4 공격). 2015년 2월, TLS의 모든 버전에서 RC4의 이용을 금지하는 RFC 7465가 공개되었다. 스트림 암호인 ChaCha20과 인증을 위한 Poly1305를 조합한 ChaCha20+Poly1305가 RFC 7905로 표준화되었다.
몇몇 국가 표준에 기반한 암호화 알고리즘도 TLS에서 사용할 수 있으며, 일본의 CRYPTREC에 의한 권장 암호인 카멜리아 (CBC 모드:RFC 4132, RFC 5932, RFC 6367, GCM:RFC 6367), 한국의 정보 통신 표준 규격에 채용된 SEED (CBC 모드:RFC 4162), ARIA (CBC 모드 및 GCM:RFC 6209)가 추가되었다. 또한, 독립 국가 연합의 GOST 규격에 의해 규정된 암호화 알고리즘인 GOST 28147-89도 제안되고 있다.[216]
5. 1. 4. 암호화 해시 함수
TLS에서는 HMAC-MD5 또는 HMAC-SHA 해시 함수가 사용된다. SSL에서는 MD5와 SHA가 사용되었고, 이전 버전의 SSL에서는 MD2와 MD4가 사용되었다.[31][32][33][34]5. 2. 디지털 인증서

디지털 인증서는 인증서에 이름이 명시된 주체가 공개 키를 소유하고 있음을 증명하며, 해당 키가 특정한 용도로 사용될 것임을 나타낸다. 이를 통해 다른 사용자(신뢰 당사자)는 인증된 공개 키에 해당하는 개인 키로 만들어진 서명이나 주장에 의존할 수 있다. 키 저장소 및 신뢰 저장소는 .pem, .crt, .pfx, .jks와 같은 다양한 형식이 될 수 있다.
SSL 인증서는 다음과 같은 기능을 제공한다.
- '''암호화''': SSL 인증서는 웹 서버와 사용자의 브라우저 간에 전송되는 데이터를 암호화하여 전송 과정에서 민감한 정보가 보호되도록 한다.
- '''인증''': SSL 인증서는 웹사이트의 무결성을 보장하고 방문자가 악의적인 사칭자가 아닌 올바른 서버에 연결되도록 돕는다.
- '''무결성''': SSL 인증서는 데이터 무결성을 보장한다. SSL은 암호화 기술을 사용하여 서버와 브라우저 간에 통신되는 데이터가 전송 중에 변경되지 않고 온전하게 유지되도록 검증한다.
클라이언트와 서버는 필요에 따라 Change Cipher Spec 프로토콜 메시지를 서로에게 보내고, 종료를 의미하는 Finished 메시지를 보낸다.[198]
5. 2. 1. 인증 기관
TLS는 일반적으로 인증서의 진위 여부를 확인하기 위해 신뢰할 수 있는 제3자 인증 기관 집합에 의존한다. 신뢰는 일반적으로 사용자 에이전트 소프트웨어와 함께 배포되는 인증서 목록에 고정되어 있으며,[64] 의존 당사자에 의해 수정될 수 있다.X.509 인증서를 선택한 결과, 인증서와 소유자 간의 관계를 확인하고, 인증서의 유효성을 생성, 서명 및 관리하기 위해 인증 기관과 공개 키 기반 구조가 필요하다. 이는 신뢰의 웹을 통해 신원을 확인하는 것보다 더 편리할 수 있지만, 2013년 이후의 세계적 감시 폭로로 인해 인증 기관이 보안 관점에서 취약점이며, 인증 기관이 협력하거나 손상된 경우 중간자 공격(MITM)을 허용한다는 사실이 더 널리 알려지게 되었다.[68][69]
Netcraft에 따르면, 활성 TLS 인증서를 모니터링하는 시장 선도 인증 기관(CA)은 조사 시작 이후 시만텍(Symantec)이었다(또는 시만텍이 인증 서비스 사업부를 인수하기 전에는 VeriSign). 2015년 기준으로 시만텍은 모든 인증서의 3분의 1 미만, Netcraft가 집계한 100만 개의 가장 바쁜 웹사이트에서 사용되는 유효한 인증서의 44%를 차지했다.[65] 2017년에 시만텍은 TLS/SSL 사업을 DigiCert에 매각했다.[66] 업데이트된 보고서에 따르면 IdenTrust, DigiCert, Sectigo가 2019년 5월 이후 시장 점유율 측면에서 상위 3대 인증 기관인 것으로 나타났다.[67]
5. 3. Forward Secrecy
전송 계층 보안의 순방향 비밀성은, 개인 키 중 하나가 나중에 손상되더라도 공개 키와 개인 키 집합에서 파생된 세션 키가 손상되지 않도록 보장하는 암호화 시스템의 속성이다.[165] 순방향 비밀성이 없으면 서버의 개인 키가 손상된 경우 해당 서버 인증서를 사용하여 암호화된 모든 미래의 TLS 세션이 손상될 뿐만 아니라, 과거에 사용했던 세션(해당 세션이 전송 당시 가로채서 저장된 경우)도 손상된다.[166]TLS 구현은 세션 키를 설정하기 위해 임시 디피-헬만 키 교환의 사용을 요구함으로써 순방향 비밀성을 제공할 수 있으며, 일부 주목할 만한 TLS 구현은 이를 독점적으로 수행한다. 예를 들어, Gmail 및 OpenSSL을 사용하는 다른 Google HTTPS 서비스가 있다.[167] 그러나 TLS를 지원하는 많은 클라이언트와 서버(브라우저 및 웹 서버 포함)는 그러한 제한을 구현하도록 구성되어 있지 않다.[168][169] 실제로 웹 서비스가 순방향 비밀성을 구현하기 위해 디피-헬만 키 교환을 사용하지 않는 한, 해당 서비스로 오가는 모든 암호화된 웹 트래픽은 제3자가 서버의 마스터(개인) 키를 획득하면, 예를 들어 법원 명령을 통해 해독될 수 있다.[170]
디피-헬만 키 교환이 구현된 경우에도 서버 측 세션 관리 메커니즘이 순방향 비밀성에 영향을 줄 수 있다. TLS 세션 티켓 (TLS 확장)을 사용하면 순방향 비밀성 암호화 제품군을 포함한 다른 협상된 TLS 매개변수와 관계없이 세션이 AES128-CBC-SHA256으로 보호되며, 장기간 유지되는 TLS 세션 티켓 키는 순방향 비밀성을 구현하려는 시도를 무력화한다.[182][180][181] 2014년 스탠포드 대학교의 연구에 따르면, 순방향 비밀성을 지원하기 위해 임시 디피-헬만(DHE) 키 교환을 배포한 서버 473,802개 중 82.9%가 약한 디피-헬만 매개변수를 사용하고 있는 것으로 나타났다. 이러한 약한 매개변수 선택은 서버가 제공하고자 하는 순방향 비밀성의 효과를 잠재적으로 손상시킬 수 있다.[171]
2011년 말부터 구글은 Gmail 서비스 사용자에게 TLS를 사용하여 순방향 비밀성을 기본적으로 제공하고 있으며, Google 문서도구 및 암호화된 검색 등 다른 서비스도 제공하고 있다.[172] 2013년 11월부터 트위터는 해당 서비스 사용자에게 TLS를 사용하여 순방향 비밀성을 제공하고 있다.[173] 2019년 8월 기준, TLS를 지원하는 웹사이트의 약 80%가 대부분의 웹 브라우저에 순방향 비밀성을 제공하는 암호화 제품군을 사용하도록 구성되어 있다.[98]
6. 프로토콜 상세 정보
넷스케이프는 최초의 SSL 프로토콜을 개발했으며, 1995년부터 1998년까지 넷스케이프의 수석 과학자였던 타헤르 엘가말은 "SSL의 아버지"로 묘사된다.[31][32][33][34] SSL 1.0은 심각한 보안 결함으로 공개되지 않았고, 1995년 2월에 출시된 SSL 2.0 역시 여러 보안 및 사용성 결함이 있었다.
이러한 결함으로 인해 1996년 SSL 3.0이 출시되었다.[35][33] SSL 2.0은 2011년에, SSL 3.0은 2014년 POODLE 공격에 취약점이 발견되어 2015년에 더 이상 사용되지 않게 되었다.
넷스케이프 커뮤니케이션즈가 설계한 SSL 첫 번째 버전은 설계 검토 단계에서 큰 취약점이 발견되어 폐기되었다. 넷스케이프는 SSL 1.0의 문제를 수정, 재설계하여 1994년에 SSL 2.0을 발표했고, Netscape Navigator 1.1에 구현했다. 이후 SSL 2.0의 취약점이 발견되어 SSL 3.0에서 수정되었다. SSL 3.0은 SSL 2.0과의 호환을 위해 난수 영역을 사용한 트릭을 추가, 공격 탐지 메커니즘을 내장했다. 2011년 3월, SSL 2.0 사용이 금지되었다.
TLS는 핸드셰이크 프로토콜의 ClientHello, ServerHello에서 사용할 암호 스위트(ciphersuite)를 결정한다. TLS 1.2에서 암호 스위트는 다음과 같은 형식으로 표현한다.
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
이는 다음을 의미한다.
- 키 공유 방식: EDH(Ephemeral Diffie-Hellman) 통신에 DSS 서명 사용
- 인증 암호: 평문에 MAC을 붙인 후 공통 키 암호화(MAC-then-Encrypt(MtE)형)
- 공통 키 암호: CBC 모드의 256비트 키 AES 사용
- MAC: SHA256 해시 함수 기반 HMAC 사용
TLS 1.2는 MtE형 외에 AES-GCM 등 인증 암호 전용 암호 이용 모드도 사용할 수 있다.
키 공유, 공통 키 암호, 해시 함수 조합은 동시에 사용할 수 없는 경우도 있다. SSL/TLS에서 사용 가능한 키 공유 방식은 다음과 같다. (DH는 디피-헬만 의미, DH-ANON, ECDH-ANON은 중간자 공격에 취약)
- '''DH-ANON''' (Anonymous DH), '''ECDH-ANON''' (Anonymous ECDH): 서명 없이 DH 키 공유, ECDH 키 공유 수행
- '''DHE-*''' ('''Ephemeral DH'''): 키 공유 시 클라이언트, 서버가 임의 값을 선택, 계산 값에 서명문을 첨부하여 교환. 서명 방식은 "'''*'''" 부분에 기재. '''ECDHE-***'''는 DHE의 타원 DH 버전
- '''DH-*''' ('''Fixed DH''' 또는 '''non-interactive DH'''): 디피-헬만 매개변수(클라이언트와 서버 특정 값)가 클라이언트나 서버 공개 키로 인증 기관에서 공개 키 인증서를 수신한 경우의 디피-헬만 키 공유. 공개 키 인증서 내 서명문 작성 서명 방식은 "'''*'''" 부분에 기재. '''ECDH-***''' ('''Fixed ECDH''')는 Fixed DH의 타원 DH 버전
- '''RSA-*''': 임의 선택 공유 키를 서버 공개 키로 RSA 암호화, 암호문을 "'''*'''"로 지정된 서명 방식으로 서명하여 ClientKeyExchange에서 클라이언트가 서버로 전송 (ServerKeyExchange에서는 아무것도 보내지 않음)
어떤 키 공유 방식이든 공유된 키(premaster secret)를 사용한 의사 난수 함수에 클라이언트가 선택한 난수와 서버가 선택한 난수 등을 나열, 입력하여 최종 master secret을 얻는다.
알고리즘 | SSL 2.0 | SSL 3.0 | TLS 1.0 | TLS 1.1 | TLS 1.2 | TLS 1.3 | 상황 |
---|---|---|---|---|---|---|---|
RSA | 예 | 예 | 예 | 예 | 예 | 아니요 | TLS 1.2를 위해 RFC에 정의됨 |
DH-RSA | 아니요 | 예 | 예 | 예 | 예 | 아니요 | |
DHE-RSA (순방향 비밀성) | 아니요 | 예 | 예 | 예 | 예 | 예 | |
ECDH-RSA | 아니요 | 아니요 | 예 | 예 | 예 | 아니요 | |
ECDHE-RSA (순방향 비밀성) | 아니요 | 아니요 | 예 | 예 | 예 | 예 | |
DH-DSS | 아니요 | 예 | 예 | 예 | 예 | 아니요 | |
DHE-DSS (순방향 비밀성) | 아니요 | 예 | 예 | 예 | 예 | 아니요[215] | |
ECDH-ECDSA | 아니요 | 아니요 | 예 | 예 | 예 | 아니요 | |
ECDHE-ECDSA (순방향 비밀성) | 아니요 | 아니요 | 예 | 예 | 예 | 예 | |
아니요 | 아니요 | 예 | 예 | 예 | 예 | ||
-RSA | 아니요 | 아니요 | 예 | 예 | 예 | 아니요 | |
DHE- (순방향 비밀성) | 아니요 | 아니요 | 예 | 예 | 예 | 예 | |
ECDHE- (순방향 비밀성) | 아니요 | 아니요 | 예 | 예 | 예 | 예 | |
아니요 | 아니요 | 예 | 예 | 예 | 아니요 | ||
-DSS | 아니요 | 아니요 | 예 | 예 | 예 | 아니요 | |
-RSA | 아니요 | 아니요 | 예 | 예 | 예 | 아니요 | |
KRB5 | 아니요 | 아니요 | 예 | 예 | 예 | 알 수 없음 | |
DH-ANON (안전하지 않음) | 아니요 | 예 | 예 | 예 | 예 | 아니요 | |
ECDH-ANON (안전하지 않음) | 아니요 | 아니요 | 예 | 예 | 예 | 아니요 | |
GOST R 34.10-94 / 34.10-2001[216] | 아니요 | 아니요 | 아니요 | 아니요 | 예 | 예 | RFC 초안에서 제안 중 |
TLS_PSK, TLS_SRP, Kerberos를 사용한 KRB5도 존재한다.
독립 국가 연합의 GOST 표준에 의해 규정된 키 공유 알고리즘인 GOST R 34.10도 제안되었다.[216]
6. 1. TLS 핸드셰이크
TLS 핸드셰이크는 클라이언트와 서버 간에 암호화된 통신을 설정하기 위한 절차이다. 이 과정에서 암호화 알고리즘, 키 교환 방식, 세션 키 등이 협상된다.TLS는 기본적으로 다음과 같은 3단계를 거친다.
# 지원 가능한 알고리즘 교환
# 키 교환 및 인증
# 대칭키 암호를 이용한 암호화 및 메시지 인증
우선 클라이언트와 서버는 암호 스위트(cipher suite)를 교환한다. 이 단계에서 키 교환 및 인증에 사용될 암호화 방법, 메시지 인증 코드(MAC)가 결정된다. 키 교환 및 인증 알고리즘은 공개키 방법을 사용하거나, 미리 공유된 키(TLS-PSK)를 사용할 수도 있다. 메시지 인증 코드는 HMAC 해시 함수로 만들어진다. (SSL에서는 비표준 무작위 함수를 사용한다.)
일반적으로 사용되는 알고리즘은 다음과 같다.
- 키 교환: RSA, Diffie-Hellman, ECDH, SRP, PSK
- 인증: RSA, DSA, ECDSA
- 대칭키 암호: RC4, 트리플 DES, AES, IDEA, DES, 아리아, ChaCha20, Camellia. (SSL 구 버전에서는 RC2 사용)
- 해시 함수: TLS에서는 HMAC-MD5 또는 HMAC-SHA. (SSL에서는 MD5와 SHA, SSL 구 버전에서는 MD2와 MD4 사용)
클라이언트-서버 애플리케이션은 도청 및 변조를 방지하기 위해 TLS 프로토콜을 사용한다.[2] 클라이언트가 서버에 TLS 연결을 요청하면 핸드셰이크 절차를 사용하여 상태 연결을 협상한다.[3]
TLS 핸드셰이크는 비대칭 암호화를 사용하여 암호 설정을 협상하고, 대칭 암호화에 사용될 세션별 공유 키를 설정한다. 핸드셰이크 과정에서 클라이언트와 서버는 연결 보안에 사용되는 다양한 매개변수에 동의한다.
- 클라이언트는 보안 연결을 요청하며 TLS를 지원하는 서버에 연결하고, 지원하는 암호화 제품군 목록(암호 및 해시 함수)을 제시한다.
- 서버는 지원하는 암호 및 해시 함수를 선택하고 클라이언트에 알린다.
- 서버는 디지털 인증서 형태로 신원을 제공한다. ( 서버 이름, 인증서의 진위 여부를 보증하는 신뢰할 수 있는 인증 기관(CA), 서버의 공개 암호화 키 포함)
- 클라이언트는 인증서의 유효성을 확인한다.
- 보안 연결에 사용되는 세션 키를 생성하기 위해 클라이언트는 다음 중 하나를 수행한다.
- 서버의 공개 키로 난수(''PreMasterSecret'')를 암호화하여 서버에 보낸다. (서버만 개인 키로 해독 가능) 이후 양측은 난수를 사용하여 세션 동안 데이터 암호화 및 해독을 위한 고유한 세션 키를 생성한다.
- 디피-헬만 키 교환 (또는 타원 곡선 DH)을 사용하여 전방 보안 속성을 갖는 암호화 및 해독을 위한 무작위하고 고유한 세션 키를 안전하게 생성한다. (서버의 개인 키가 나중에 공개되어도 제3자가 현재 세션을 해독할 수 없다.)
핸드셰이크가 종료되고 보안 연결이 시작되면, 연결이 종료될 때까지 세션 키로 암호화 및 해독이 이루어진다. 위 단계 중 하나라도 실패하면 TLS 핸드셰이크가 실패하고 연결이 생성되지 않는다.
TLS는 키 교환, 데이터 암호화, 메시지 무결성 인증을 위한 다양한 방법을 지원한다. TLS의 보안 구성에는 많은 매개변수가 있으며, 모든 선택 사항이 동일한 수준의 개인 정보 관련 속성을 제공하는 것은 아니다.
TLS가 제공하려는 통신 보안을 훼손하려는 시도가 있었고, 이러한 보안 위협을 해결하기 위해 프로토콜이 여러 번 수정되었다. 웹 브라우저 개발자들은 잠재적 보안 취약성이 발견될 때마다 제품을 수정하여 대응해왔다.
TLS 프로토콜은 ''레코드''를 교환하여 데이터를 캡슐화한다. 각 레코드는 연결 상태에 따라 압축, 패딩, 메시지 인증 코드(MAC)가 추가되거나 암호화될 수 있다. 각 레코드는 캡슐화된 데이터의 유형을 지정하는 ''콘텐츠 유형'' 필드, 길이 필드, TLS 버전 필드를 갖는다. 캡슐화된 데이터는 TLS 자체의 제어/절차 메시지이거나 TLS를 통해 전송해야 하는 애플리케이션 데이터일 수 있다. TLS를 통해 애플리케이션 데이터를 교환하는 데 필요한 사양(암호화 제품군, 키 등)은 "TLS 핸드셰이크"에서 합의된다.
연결 시작 시 레코드는 핸드셰이크 메시징 프로토콜(''콘텐츠 유형'' 22)을 캡슐화한다. 이 프로토콜은 TLS를 통해 실제 애플리케이션 데이터를 교환하기 위해 필요한 정보를 교환하는 데 사용된다. 메시지 형식과 교환 순서는 클라이언트와 서버의 요구 사항에 따라 달라질 수 있다. 초기 교환 결과는 성공적인 TLS 연결 또는 경고 메시지이다.
TLS 1.3 핸드셰이크는 이전 버전에 비해 왕복 횟수가 줄었다.
핸드셰이크를 시작하기 위해 클라이언트는 서버가 선택할 키 교환 알고리즘을 추측하고, 지원하는 암호 목록과 일부 또는 모든 키 교환 추측에 대한 공개 키를 포함하는 '''ClientHello''' 메시지를 서버로 보낸다. 클라이언트가 키 교환 알고리즘을 성공적으로 추측하면 핸드셰이크에서 한 번의 왕복이 제거된다. '''ClientHello'''를 받은 후, 서버는 암호를 선택하고 자체 공개 키와 서버 '''인증서''', '''Finished''' 메시지를 포함하는 '''ServerHello'''를 보낸다.
클라이언트는 서버의 finished 메시지를 받은 후, 어떤 암호 제품군을 사용할지에 대해 서버와 조율된다.
TLS 세션 설정 중에 교환되는 대부분의 메시지는 이 레코드를 기반으로 한다. 오류 또는 경고가 발생하거나, 세션의 암호화 모드가 변경되는 경우는 예외이다.
오프셋 | 바이트+0 | 바이트+1 | 바이트+2 | 바이트+3 |
---|---|---|---|---|
바이트 0 | 22 | colspan=3| | ||
바이트 1–4 | 레거시 버전 | 길이 | ||
(주 버전) | (부 버전) | (비트 15–8) | (비트 7–0) | |
바이트 5–8 | 메시지 유형 | 핸드셰이크 메시지 데이터 길이 | ||
(비트 23–16) | (비트 15–8) | (비트 7–0) | ||
바이트 9–(n−1) | 핸드셰이크 메시지 데이터 | |||
바이트 n–(n+3) | 메시지 유형 | 핸드셰이크 메시지 데이터 길이 | ||
(비트 23–16) | (비트 15–8) | (비트 7–0) | ||
바이트 (n+4)– | 핸드셰이크 메시지 데이터 |
;메시지 유형: 핸드셰이크 메시지 유형을 식별한다.
코드 | 설명 |
---|---|
0 | HelloRequest |
1 | ClientHello |
2 | ServerHello |
4 | NewSessionTicket |
8 | EncryptedExtensions (TLS 1.3만 해당) |
11 | Certificate |
12 | ServerKeyExchange |
13 | CertificateRequest |
14 | ServerHelloDone |
15 | CertificateVerify |
16 | ClientKeyExchange |
20 | Finished |
;핸드셰이크 메시지 데이터 길이
: 헤더를 제외한 핸드셰이크 데이터의 길이를 나타내는 3바이트 필드이다.
하나의 레코드 내에 여러 핸드셰이크 메시지가 결합될 수 있다.
넷스케이프 커뮤니케이션즈가 SSL의 첫 번째 버전을 설계했지만, 설계 검토 단계에서 프로토콜 자체에 큰 취약점이 발견되어 폐기되었다.
넷스케이프는 SSL 1.0의 문제를 수정하고 재설계하여 1994년에 SSL 2.0을 발표했다. Netscape Navigator 1.1에 SSL 2.0을 구현했다.
이후, SSL 2.0에도 몇 가지 취약점이 발견되어 SSL 3.0에서 수정되었다. SSL 2.0의 취약점 중 하나는 협상 정보를 위조하면 제시된 선택지 중 가장 약한 알고리즘을 사용하게 할 수 있고(다운그레이드 공격), 위조된 것을 탐지할 수 없다는 것이다. 더욱 심각한 것은 이 취약점을 이용하면 양쪽 모두 SSL 3.0을 지원하더라도 SSL 2.0으로 연결되게 하는 것조차 가능하다.
SSL 3.0에서는 SSL 2.0과의 호환성을 위해 난수 영역을 사용한 트릭을 추가하여 이러한 공격을 탐지하는 메커니즘을 내장했다. 하지만 이 트릭이 비활성화된 서버 환경도 존재하며, 클라이언트 입장에서 보면 SSL 2.0을 비활성화하지 않는 한 이 취약점의 영향을 받을 가능성을 부정할 수 없다[204] . SSL 3.0 이후를 지원하는 구현이 충분히 보급된 것으로, Internet Explorer 7이나 Mozilla Firefox 2, Opera 9 등은 초기 상태에서 SSL 2.0을 비활성화하고 있다[205][206][207] .
SSL 2.0에는 체인 인증서가 없으며, 루트 CA에서 발급한 SSL 서버 인증서만 사용할 수 있다.
2011년 3월, SSL 2.0의 사용은 금지되었다.
TLS에서는 핸드셰이크 프로토콜의 ClientHello, ServerHello에서 이후 통신에 사용할 암호 스위트(ciphersuite)를 결정한다. TLS 1.2에서는 암호 스위트를 다음과 같은 형식으로 표현한다.
TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
이는 다음과 같은 의미이다.
- 키 공유 방식으로 다음을 사용한다.
- EDH(Ephemeral Diffie-Hellman) 통신에
- DSS 서명한 것
- 인증 암호로 평문에 MAC을 붙인 후에 공통 키 암호화하는 것(MAC-then-Encrypt(MtE)형)으로
- 공통 키 암호로 CBC 모드의 256비트 키 AES를 사용하고,
- MAC으로는 SHA256 해시 함수를 기반으로 한 HMAC을 사용한다.
TLS1.2에서는 인증 암호로 MtE형 뿐만 아니라 AES-GCM과 같은 인증 암호 전용으로 만들어진 암호 이용 모드도 사용할 수 있게 되었다. 이 경우 MAC은 아예 필요 없다.
RSA 암호와 RSA 서명을 조합하여 실현한 키 공유 방식에 대해서는 TLS_RSA_RSA_WITH…처럼 RSA를 두 번 쓰지 않고, TLS_RSA_WITH_…처럼 약칭한다.
키 공유, 공통 키 암호, 해시 함수의 모든 조합이 망라되어 있는 것은 아니므로 동시에 사용할 수 없는 조합도 존재한다.
SSL/TLS에서 사용할 수 있는 키 공유 방식은 다음과 같다. 여기서 DH는 디피-헬만을 의미한다. DH-ANON, ECDH-ANON은 중간자 공격에 취약하므로 안전하다고 간주되지 않는다.
- '''DH-ANON''' (Anonymous DH), '''ECDH-ANON''' (Anonymous ECDH)은 각각 전송 데이터에 서명하지 않고 DH 키 공유, ECDH 키 공유를 수행하는 방식이다.
- '''DHE-*'''는 '''Ephemeral DH'''라고 불리며, 키 공유 시 클라이언트, 서버가 임의의 값을 선택하고, 각 값을 이용해 계산한 값에 서명문을 첨부하여 교환하는 방식이다. 서명 방식은 "'''*'''" 부분에 기재된 것을 사용한다. '''ECDHE-***'''는 DHE의 타원 DH 버전이다.
- '''DH-*'''는 '''Fixed DH''' 또는 '''non-interactive DH'''라고 불리며, 디피-헬만에서 사용하는 매개변수(클라이언트와 서버의 특정 값)가 클라이언트나 서버의 공개 키로 인증 기관으로부터 공개 키 인증서를 수신한 경우의 디피-헬만 키 공유이다. 공개 키 인증서 내의 서명문을 작성하는 서명 방식은 "'''*'''" 부분에 기재된 것을 사용한다. '''ECDH-***''' ('''Fixed ECDH''')는 Fixed DH의 타원 DH 버전이다.
- '''RSA-*'''는 임의로 선택한 공유 키를 서버의 공개 키로 RSA 암호화하고, 암호문을 "'''*'''"로 지정된 서명 방식으로 서명한 것을 ClientKeyExchange에서 클라이언트가 서버로 보내는 방식이다. (ServerKeyExchange에서는 아무것도 보내지 않음).
어떤 키 공유 방식에서든 공유된 키(premaster secret)를 사용한 의사 난수 함수에 클라이언트가 선택한 난수와 서버가 선택한 난수 등을 나열한 것을 입력하여 최종 master secret을 얻는다. 이를 통해 재생 공격을 방지한다.
알고리즘 | SSL 2.0 | SSL 3.0 | TLS 1.0 | TLS 1.1 | TLS 1.2 | TLS 1.3 | 상황 |
---|---|---|---|---|---|---|---|
RSA | 예 | 예 | 예 | 예 | 예 | 아니요 | TLS 1.2를 위해 RFC에 정의됨 |
DH-RSA | 아니요 | 예 | 예 | 예 | 예 | 아니요 | |
DHE-RSA (순방향 비밀성) | 아니요 | 예 | 예 | 예 | 예 | 예 | |
ECDH-RSA | 아니요 | 아니요 | 예 | 예 | 예 | 아니요 | |
ECDHE-RSA (순방향 비밀성) | 아니요 | 아니요 | 예 | 예 | 예 | 예 | |
DH-DSS | 아니요 | 예 | 예 | 예 | 예 | 아니요 | |
DHE-DSS (순방향 비밀성) | 아니요 | 예 | 예 | 예 | 예 | 아니요[215] | |
ECDH-ECDSA | 아니요 | 아니요 | 예 | 예 | 예 | 아니요 | |
ECDHE-ECDSA (순방향 비밀성) | 아니요 | 아니요 | 예 | 예 | 예 | 예 | |
아니요 | 아니요 | 예 | 예 | 예 | 예 | ||
-RSA | 아니요 | 아니요 | 예 | 예 | 예 | 아니요 | |
DHE- (순방향 비밀성) | 아니요 | 아니요 | 예 | 예 | 예 | 예 | |
ECDHE- (순방향 비밀성) | 아니요 | 아니요 | 예 | 예 | 예 | 예 | |
아니요 | 아니요 | 예 | 예 | 예 | 아니요 | ||
-DSS | 아니요 | 아니요 | 예 | 예 | 예 | 아니요 | |
-RSA | 아니요 | 아니요 | 예 | 예 | 예 | 아니요 | |
KRB5 | 아니요 | 아니요 | 예 | 예 | 예 | 알 수 없음 | |
DH-ANON (안전하지 않음) | 아니요 | 예 | 예 | 예 | 예 | 아니요 | |
ECDH-ANON (안전하지 않음) | 아니요 | 아니요 | 예 | 예 | 예 | 아니요 | |
GOST R 34.10-94 / 34.10-2001[216] | 아니요 | 아니요 | 아니요 | 아니요 | 예 | 예 | RFC 초안에서 제안 중 |
를 사용한 TLS_PSK, 을 사용한 TLS_SRP, Kerberos를 사용한 KRB5도 존재한다.
독립 국가 연합의 GOST 표준에 의해 규정된 키 공유 알고리즘인 GOST R 34.10도 제안되었다[216]。
6. 1. 1. 기본 TLS 핸드셰이크
클라이언트-서버 애플리케이션은 TLS 프로토콜을 사용하여 네트워크를 통해 통신하며, 이때 도청 및 변조를 방지하도록 설계되어 있다.[2] 클라이언트와 서버가 TLS를 사용하기로 합의하면, 핸드셰이크 절차를 통해 상태 연결을 협상한다.[3] 이 핸드셰이크 동안 클라이언트와 서버는 연결 보안에 사용되는 다양한 매개변수에 동의하며, 서버 인증만 수행하는 기본적인 절차는 다음과 같다.1. 협상 단계:
- 클라이언트는 지원하는 가장 높은 TLS 프로토콜 버전, 임의의 숫자, 제안된 암호화 제품군 목록 및 제안된 압축 방법을 지정하는 '''ClientHello''' 메시지를 보낸다.
- 서버는 클라이언트가 제공한 선택 사항에서 선택한 프로토콜 버전, 임의의 숫자, 암호 제품군 및 압축 방법을 포함하는 '''ServerHello''' 메시지로 응답한다. 선택한 프로토콜 버전은 클라이언트와 서버 모두가 지원하는 가장 높은 버전이어야 한다.
- 서버는 '''Certificate''' 메시지를 보낸다(선택한 암호 제품군에 따라 서버에서 이 메시지를 생략할 수 있다).[175]
- 서버는 '''ServerKeyExchange''' 메시지를 보낸다(선택한 암호 제품군에 따라 서버에서 이 메시지를 생략할 수 있다).
- 서버는 핸드셰이크 협상이 완료되었음을 나타내는 '''ServerHelloDone''' 메시지를 보낸다.
- 클라이언트는 ''PreMasterSecret''을 포함할 수 있는 '''ClientKeyExchange''' 메시지로 응답한다. 이 ''PreMasterSecret''은 서버 인증서의 공개 키를 사용하여 암호화된다.
- 클라이언트와 서버는 임의의 숫자와 ''PreMasterSecret''을 사용하여 "마스터 시크릿"이라는 공통 비밀을 계산한다. 이 연결에 대한 다른 모든 키 데이터(세션 키, IV, 대칭 암호화 키, MAC 키[176])는 이 마스터 시크릿에서 파생된다.
- 클라이언트는 '''ChangeCipherSpec''' 레코드를 보내 서버에게 "지금부터 내가 말하는 모든 것은 인증됩니다(그리고 서버 인증서에 암호화 매개변수가 있는 경우 암호화됨)"라고 알린다.
- 클라이언트는 이전 핸드셰이크 메시지에 대한 해시 및 MAC을 포함하는 인증되고 암호화된 '''Finished''' 메시지를 보낸다.
- 서버는 클라이언트의 ''Finished'' 메시지를 해독하고 해시 및 MAC을 확인한다. 해독 또는 확인에 실패하면 핸드셰이크가 실패한 것으로 간주하고 연결을 종료해야 한다.
- 마지막으로 서버는 '''ChangeCipherSpec'''을 보내 클라이언트에게 "지금부터 내가 말하는 모든 것은 인증됩니다(그리고 암호화가 협상된 경우 암호화됨)"라고 알린다.
- 서버는 인증되고 암호화된 '''Finished''' 메시지를 보낸다.
- 클라이언트는 이전 단계에서 서버가 수행한 것과 동일한 해독 및 확인 절차를 수행한다.
2. 애플리케이션 단계: 이 시점에서 "핸드셰이크"가 완료되고 애플리케이션 프로토콜이 활성화된다. 클라이언트와 서버 간에 교환되는 애플리케이션 메시지는 ''Finished'' 메시지와 마찬가지로 인증되고 선택적으로 암호화된다.
6. 1. 2. 클라이언트 인증 TLS 핸드셰이크
클라이언트와 서버 모두 인증서를 사용하여 상호 인증하는 전체 TLS 핸드셰이크 과정은 다음과 같다.1. '''협상 단계:'''
- 클라이언트가 자신이 지원하는 가장 높은 TLS 프로토콜 버전, 난수, 제안된 암호 제품군 및 압축 방식 목록을 지정하는 '''ClientHello''' 메시지를 서버에 보낸다.
- 서버는 '''ServerHello''' 메시지로 응답한다. 이 메시지에는 클라이언트가 제공한 선택 항목에서 서버가 선택한 프로토콜 버전, 난수, 암호 제품군 및 압축 방식이 포함된다. 서버는 재개된 핸드셰이크를 수행하기 위해 ''세션 ID''를 메시지의 일부로 보낼 수도 있다.
- 서버는 자체 '''Certificate''' 메시지를 보낸다. (선택한 암호 제품군에 따라 서버는 이 메시지를 생략할 수 있다.)[175]
- 서버는 자체 '''ServerKeyExchange''' 메시지를 보낸다. (선택한 암호 제품군에 따라 서버는 이 메시지를 생략할 수 있다.) 이 메시지는 모든 DHE, ECDHE 및 DH_anon 암호 제품군에 대해 전송된다.
- 서버는 클라이언트에게 인증서를 요청하기 위해 '''CertificateRequest''' 메시지를 보낸다.
- 서버는 핸드셰이크 협상이 완료되었음을 알리는 '''ServerHelloDone''' 메시지를 보낸다.
- 클라이언트는 클라이언트의 인증서를 포함하지만 개인 키는 포함하지 않는 '''Certificate''' 메시지로 응답한다.
- 클라이언트는 ''PreMasterSecret'', 공개 키 또는 아무것도 포함하지 않을 수 있는 '''ClientKeyExchange''' 메시지를 보낸다. (이 또한 선택한 암호에 따라 다릅니다.) 이 ''PreMasterSecret''는 서버 인증서의 공개 키를 사용하여 암호화된다.
- 클라이언트는 '''CertificateVerify''' 메시지를 보낸다. 이 메시지는 클라이언트 인증서의 개인 키를 사용하여 이전 핸드셰이크 메시지에 대한 서명이다. 이 서명은 클라이언트 인증서의 공개 키를 사용하여 확인할 수 있다. 이를 통해 서버는 클라이언트가 인증서의 개인 키에 접근할 수 있고, 따라서 인증서를 소유하고 있음을 알 수 있다.
- 클라이언트와 서버는 난수와 ''PreMasterSecret''를 사용하여 "마스터 비밀"이라고 하는 공통 비밀을 계산한다. 이 연결에 대한 다른 모든 키 데이터("세션 키")는 신중하게 설계된 의사 난수 함수를 통해 전달되는 이 마스터 비밀(및 클라이언트 및 서버에서 생성된 임의 값)에서 파생된다.
- 클라이언트는 '''ChangeCipherSpec''' 레코드를 보낸다. ChangeCipherSpec 자체는 레코드 수준 프로토콜이며 유형 20이다. 이것은 "지금부터 내가 알려주는 모든 것은 인증됩니다(그리고 암호화가 협상된 경우 암호화됩니다)."라고 서버에게 알리는 것이다.
- 마지막으로, 클라이언트는 이전 핸드셰이크 메시지에 대한 해시 및 MAC을 포함하는 암호화된 '''Finished''' 메시지를 보낸다.
- 서버는 클라이언트의 ''Finished'' 메시지를 해독하고 해시 및 MAC을 확인하려고 시도한다. 해독 또는 확인에 실패하면 핸드셰이크가 실패한 것으로 간주되고 연결이 끊어진다.
- 마지막으로 서버는 '''ChangeCipherSpec'''을 보내어 "지금부터 내가 알려주는 모든 것은 인증됩니다(그리고 암호화가 협상된 경우 암호화됩니다)."라고 클라이언트에게 알린다.
- 서버는 자체 암호화된 '''Finished''' 메시지를 보낸다.
- 클라이언트는 이전 단계에서 서버가 수행한 것과 동일한 해독 및 확인 절차를 수행한다.
2. '''응용 프로그램 단계:''' 이 시점에서 "핸드셰이크"가 완료되고 응용 프로그램 프로토콜이 활성화되며 콘텐츠 유형은 23이다. 클라이언트와 서버 간에 교환된 응용 프로그램 메시지도 ''Finished'' 메시지에서와 마찬가지로 정확히 암호화된다.
6. 1. 3. 재개된 TLS 핸드셰이크
TLS는 공개 키 연산의 계산 비용을 줄이기 위해 재개된 세션이라는 보안 지름길을 제공한다. 재개된 세션은 세션 ID 또는 세션 티켓을 사용하여 구현된다.[177]재개된 세션은 성능 향상 외에도 싱글 사인온에도 사용될 수 있는데, 이는 원래 세션과 재개된 모든 세션이 동일한 클라이언트에서 시작되었음을 보장하기 때문이다. 공격자가 보조 데이터 연결의 내용을 가로챌 수 있는 TLS/SSL을 통한 FTP 프로토콜에서 특히 중요하다.[177]
6. 2. TLS 레코드
01–4
5–(m−1)
m–(p−1)
p–(q−1)